package com.zking.frame.czp;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableRowSorter;

import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;

import com.zking.db.BaseDao;
import com.zking.frame.lsx.AddCustomer;
import com.zking.frame.lsx.UpdateMsg;

// 子面板
public class CustomerMsgson extends JDialog {
	// 美化包
	{
		try {
			BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
			org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	private List<String> sonlists = new ArrayList<String>();// 子面板的内容
	private List<String> addslists = new ArrayList<String>();// 接收字面板的参数重新填入面板
	// 列表头文件
	String[] columnNams = { "标号", "客户名称", "拼音码", "城市", "地址", "账号", "电话", "开户行", "邮政编码", "传真", "Email", "联系手机", "联系人",
			"期初应收", "期初应付", "性别", "余额", "折扣", "创建时间", "修改时间", "VIP" };
	private int rowCount;// 数据库行
	private int columnCount;// 数据库列
	private String[][] str;// 数据
	private int id;// 编号
	private int num;// 账号的尾号
	private JPanel pl_north;// 上部面板

	private Font font;// 字体大小
	private JLabel customer;// 客户标签
	private JTextField tf_name;// 填写客户名的文本框

	private JButton bt_charge;// 充值
	private JTextField tf_charge;// 充值文本
	private JButton bt_search;// 查询按钮
	private JButton bt_insert;// 新增按钮
	private JButton bt_updata;// 修改按钮
	private int selectRow;// 鼠标选定的行号

	private JPanel pl_center;// 中部面板
	private JTable tb_Msg;// 表格
	private DefaultTableModel dtm;// 表格模型
	private JScrollPane sp;// 滚动面板
	public int row;
	public static String prename;
	public static String preid;

	private static final long serialVersionUID = 1L;

	@SuppressWarnings("serial")
	public CustomerMsgson(JFrame owner, boolean modal) {
		super(owner, modal);
		Container c = getContentPane();
		c.setLayout(new BorderLayout());// 边界布局
		// 数据库数据==>面板
		exchangeData();
		num = Integer.parseInt(str[rowCount - 1][0]) + 1;

		// 上部面板
		pl_north = new JPanel(new GridBagLayout());// 上部面板为网格布局
		c.add(pl_north, "North");
		font = new Font("楷书", Font.BOLD, 18);
		Color color_North = new Color(148, 174, 198);// 上部面板的背景色
		pl_north.setBackground(color_North);
		pl_north.setPreferredSize(new Dimension(0, 50));
		GridBagConstraints gbc = new GridBagConstraints();// 网格布局设计图

		customer = new JLabel("所有客户");
		customer.setPreferredSize(new Dimension(150, 30));
		customer.setFont(font);
		gbc.gridwidth = 1;// 设置为1表示这一行没有结束，下次还能继续添加
		gbc.gridx = 1;// 第1列
		gbc.gridy = 1;// 第1行
		pl_north.add(customer, gbc);

		JLabel lb0 = new JLabel();// 填充面板
		gbc.gridwidth = 1;// 设置为1表示这一行没有结束，下次还能继续添加
		gbc.gridx = 2;// 第2列
		gbc.gridy = 1;// 第1行
		lb0.setPreferredSize(new Dimension(550, 20));
		pl_north.add(lb0, gbc);

//		bt_charge = new JButton("充值：");
//		bt_charge.setPreferredSize(new Dimension(100, 30));
//		bt_charge.setFont(font);
//		gbc.gridx = 3;// 第3列
//		gbc.gridy = 1;// 第1行
//		pl_north.add(bt_charge, gbc);
//		// 充值
//		bt_charge.addActionListener(new ActionListener() {
//			@Override
//			public void actionPerformed(ActionEvent e) {
//				double price;
//				if ((selectRow = tb_Msg.getSelectedRow()) != -1) {
//					price = addStrings(tf_charge.getText(), dtm.getValueAt(selectRow, columnNams.length - 5) + "");
//					if (tf_charge.getText() == null || "".equals(tf_charge.getText())) {
//						JOptionPane.showMessageDialog(CustomerMsgson.this, "充值金额不能为空");
//					} else if (price == -1) {
//						JOptionPane.showMessageDialog(CustomerMsgson.this, "请输入数字");
//					} else {
//						dtm.setValueAt(price, selectRow, columnNams.length - 5);// 余额所在位置columnNams.length-5
//						// 更新语句
//						BaseDao base = new BaseDao();
//						int idNum = Integer.parseInt(str[selectRow][0]);
//						String sql = "update client set balance=? where id=?";
//						try {
//							base.update(sql, price, idNum);
//							JOptionPane.showMessageDialog(CustomerMsgson.this, "充值成功");
//						} catch (SQLException e1) {
//							e1.printStackTrace();
//						} finally {
//							try {
//								base.closeConnection();
//							} catch (SQLException e1) {
//								e1.printStackTrace();
//							}
//						}
//					}
//				} else {
//					JOptionPane.showMessageDialog(CustomerMsgson.this, "请选中所需充值的客户");// 未选中时弹窗提示
//				}
//				tf_charge.setText("");
//			}
//		});

		JLabel lb1 = new JLabel();
		gbc.gridwidth = 1;// 设置为1表示这一行没有结束，下次还能继续添加
		gbc.gridx = 4;// 第4列
		gbc.gridy = 1;// 第1行
		lb1.setPreferredSize(new Dimension(15, 20));
		pl_north.add(lb1, gbc);

//		tf_charge = new JTextField();
//		tf_charge.setPreferredSize(new Dimension(100, 25));
//		tf_charge.setFont(font);
//		gbc.gridx = 5;// 第5列
//		gbc.gridy = 1;// 第1行
//		pl_north.add(tf_charge, gbc);
//
//		JLabel lb2 = new JLabel("元");
//		lb2.setFont(font);
//		gbc.gridwidth = 1;// 设置为1表示这一行没有结束，下次还能继续添加
//		gbc.gridx = 6;// 第6列
//		gbc.gridy = 1;// 第1行
//		lb2.setPreferredSize(new Dimension(100, 20));
//		pl_north.add(lb2, gbc);

		tf_name = new JTextField();
		tf_name.setPreferredSize(new Dimension(150, 30));
		tf_name.setFont(font);
		gbc.gridwidth = 1;// 设置为1表示这一行没有结束，下次还能继续添加
		gbc.gridx = 7;// 第7列
		gbc.gridy = 1;// 第1行
		pl_north.add(tf_name, gbc);

		bt_search = new JButton("查询");
		bt_search.setPreferredSize(new Dimension(100, 30));
		bt_search.setFont(font);
		gbc.gridwidth = 1;// 0表示添加结束
		gbc.gridx = 8;// 第8列
		gbc.gridy = 1;// 第1行
		pl_north.add(bt_search, gbc);
		bt_search.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// 这里是关键
				TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(dtm);
				tb_Msg.setRowSorter(sorter);
				// 实现过滤，search为正则表达式，该方法支持参数为null和空字符串，因此不用对输入进行校验
				String search = tf_name.getText();
				sorter.setRowFilter(RowFilter.regexFilter(search));
			}
		});

		bt_insert = new JButton("新增");
		bt_insert.setPreferredSize(new Dimension(100, 30));
		bt_insert.setFont(font);
		gbc.gridwidth = 1;// 设置为1表示这一行没有结束，下次还能继续添加
		gbc.gridx = 9;// 第9列
		gbc.gridy = 1;// 第1行
		pl_north.add(bt_insert, gbc);
		bt_insert.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				String[] rowData = new String[columnNams.length];// 一行的数目
				new AddCustomer(CustomerMsgson.this, true, addslists, num);
				if (addslists.isEmpty()) {
					JOptionPane.showMessageDialog(CustomerMsgson.this, "添加失败");
				} else {
					num++;
					// 刷新数据库
					exchangeData();
					rowData[0] = str[rowCount - 1][0];
					// 将list转化成数组添加道主面板
					rowData[1] = addslists.get(0);
					rowData[2] = addslists.get(1);
					rowData[3] = addslists.get(2);
					rowData[4] = addslists.get(3);
					rowData[5] = addslists.get(4);

					rowData[6] = addslists.get(5);
					rowData[7] = addslists.get(6);
					rowData[8] = addslists.get(7);
					rowData[9] = addslists.get(8);
					rowData[10] = addslists.get(9);

					rowData[11] = addslists.get(10);
					rowData[12] = addslists.get(11);
					rowData[13] = addslists.get(12);
					rowData[14] = addslists.get(13);
					rowData[15] = addslists.get(14);

					rowData[16] = "0.0";
					rowData[17] = addslists.get(15);
					rowData[18] = addslists.get(16);
					rowData[19] = "";
					rowData[20] = addslists.get(17);

					dtm.addRow(rowData);// 添加到后面一行
					JOptionPane.showMessageDialog(CustomerMsgson.this, "添加成功");
				}
			}
		});

		bt_updata = new JButton("修改");
		bt_updata.setPreferredSize(new Dimension(100, 30));
		bt_updata.setFont(font);
		gbc.gridx = 10;// 第10列
		gbc.gridy = 1;// 第1行
		pl_north.add(bt_updata, gbc);
		bt_updata.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if ((selectRow = tb_Msg.getSelectedRow()) != -1) {
					// 获取id
					id = Integer.parseInt(str[selectRow][0]);
					// selectRow选中的行号
					String updateStr[] = updateData(id);// 这一行所需的数组
					for (int i = 0; i < updateStr.length; i++) {// i=1是因为修改时，编号不修改
						sonlists.add(updateStr[i]);// 获取选中行的所有数据
					}
					UpdateMsg u = new UpdateMsg(CustomerMsgson.this, true, sonlists, id);
					if (u.things == 1) {
						// 修改后的数据添加到主面板->刷新主面板要修改的那一行
//						dtm.setValueAt(sonlists.get(0), selectRow, 1);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(1), selectRow, 2);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(2), selectRow, 3);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(3), selectRow, 4);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(4), selectRow, 7);// selectRow行+j+1列 内容：sonlists.get(j)
//
//						dtm.setValueAt(sonlists.get(5), selectRow, 6);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(6), selectRow, 8);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(7), selectRow, 9);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(8), selectRow, 10);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(9), selectRow, 12);// selectRow行+j+1列 内容：sonlists.get(j)
//
//						dtm.setValueAt(sonlists.get(10), selectRow, 11);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(11), selectRow, 17);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(12), selectRow, 20);// selectRow行+j+1列 内容：sonlists.get(j)
//						dtm.setValueAt(sonlists.get(13), selectRow, 19);// selectRow行+j+1列 内容：sonlists.get(j)
//						// 清楚上一次的记录
						JOptionPane.showMessageDialog(CustomerMsgson.this, "修改成功");
						sonlists.clear();
					} else if (u.things == 2) {
						dtm.removeRow(selectRow);// 移除这一行
						JOptionPane.showMessageDialog(CustomerMsgson.this, "删除成功");
					} else if (u.things == 3) {
						JOptionPane.showMessageDialog(CustomerMsgson.this, "未修改");
					}
				} else {
					JOptionPane.showMessageDialog(CustomerMsgson.this, "请选中所需修改的库单");// 未选中时弹窗提示
				}
			}
		});

		// 中部面板
		pl_center = new JPanel(new BorderLayout());
		c.add(pl_center, "Center");
		// 添加行和列
		dtm = new DefaultTableModel(str, columnNams);
		tb_Msg = new JTable(dtm) {
			@Override
			public boolean isCellEditable(int row, int column) {
				return false;// 表格不允许编制
			}
		};
		// 表头
		JTableHeader head = tb_Msg.getTableHeader();
		// 表头颜色设置
		Color color_tableHeader = new Color(222, 231, 239);
		head.setBackground(color_tableHeader);
		// 设置表头大小
		head.setPreferredSize(new Dimension(head.getWidth(), 40));
		// 设置每个格子的高度
		tb_Msg.setRowHeight(30);
		// 表格添加到滚动面板
		sp = new JScrollPane(tb_Msg);
		// 水平
		sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		pl_center.add(sp);

		tb_Msg.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				if (e.getClickCount() == 2) {
					row = tb_Msg.getSelectedRow();
					prename = tb_Msg.getValueAt(row, 1).toString();
					preid = tb_Msg.getValueAt(row, 0).toString(); // 得到所在行的第一个列的值，作为下面事件传递的参数
					dispose();
				}
//				System.out.println(prename);

			}
		});

		setSize(1500, 900);// 大小放在最前面
		setTitle("客户基本资料");// 标题
		setLocationRelativeTo(owner);// 窗口居中
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);// 窗口可关闭
		setVisible(true);// 可见
	}

	/**
	 * @param余额相加
	 * @param num1充值金额
	 * @param num2余额
	 * @return
	 */
	public double addStrings(String num1, String num2) {
		double value1;
		double value2;
		double value;
		if (num2 == null || "".equals(num2) || num2.isEmpty()) {
			num2 = "0";
		}
		try {
			value1 = Double.valueOf(num1.toString());
			value2 = Double.valueOf(num2.toString());
			value = value1 + value2;
		} catch (Exception e2) {
			return -1;
		}
		return value;
	}

	/**
	 * @param定义数组的大小 @param把结果集中的每一行数据都转成一个对象数组object[] @param将list==>数组String
	 *               str[][]
	 */
	public void exchangeData() {
		BaseDao base = new BaseDao();
		// 查询语句
		String sql = "select * from client";
		// 数据集合
		List<Object[]> data = null;
		try {
			data = base.queryArrayListHandler(sql);
			// 获取数据库行和列
			rowCount = data.size();
			columnCount = data.get(0).length;
			// 设置为数组大小
			str = new String[rowCount][columnCount];
			// 将list中的集合装化成数组String str[]
			for (int i = 0; i < data.size(); i++) {
				for (int j = 0; j < data.get(i).length; j++)
					if (data.get(i)[j] != null) {
						str[i][j] = data.get(i)[j] + "";
					} else {
						str[i][j] = "";
					}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭连接
				base.closeConnection();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * @param定义数组的大小 @param把结果集中的每一行数据都转成一个对象数组object[] @param将list==>数组String
	 *               str1[]
	 */
	public String[] updateData(int selcetId) {
		// 设置为数组大小
		String[] str1 = new String[14];
		BaseDao base = new BaseDao();
		// 查询语句
		String sql = "select name,pinYinCode,city,address,discount," + "isVip,bankOfDeposit,tel,postalCode,fax,"
				+ "e_mail,contactPerson,contactTel from client where id=" + selcetId;
		// 数据集合
		Object[] data = null;
		try {
			data = base.queryArrayHandler(sql);
			// 获取数据库行和列
			rowCount = data.length;
			for (int i = 0; i < data.length; i++) {
				if (data[i] != null) {
					str1[i] = data[i] + "";
				} else {
					str1[i] = "";
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭连接
				base.closeConnection();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return str1;
	}

	public static void main(String[] args) {
		new CustomerMsgson(null, true);
	}
}
